 1.数据库特定语句
   
   1).创建数据库
   CREATE DATABASE语句句⽤用于在Impala中创建新数据库。
   CREATE DATABASE IF NOT EXISTS database_name;
   这⾥里里，IF NOT EXISTS是⼀一个可选的⼦子句句。如果我们使⽤用此⼦子句句，则只有在没有具有相同名称的现有数
据库时，才会创建具有给定名称的数据库。
   [linux122:21000] > create database if not exists lagoutest;
Query: create database if not exists lagoutest

Fetched 0 row(s) in 0.01s
[linux122:21000] > show databases;
Query: show databases
+------------------+----------------------------------------------+
| name             | comment                                      |
+------------------+----------------------------------------------+
| _impala_builtins | System database for Impala builtin functions |
| default          | Default Hive database                        |
| lagoutest        |                                              |
| mydb             |                                              |
| sale             |                                              |
| test             |                                              |
+------------------+----------------------------------------------+
Fetched 6 row(s) in 0.01s
   默认就会在hive的数仓路路径下创建新的数据库名⽂文件夹
   /user/hive/warehouse/lagoutest.db
   2).删除数据库
   Impala的DROP DATABASE语句句⽤用于从Impala中删除数据库。 在删除数据库之前，建议从中删除所有
表。
   如果使⽤用级联删除，Impala会在删除指定数据库中的表之前删除它。
   drop database sample cascade;
 
 2.表特定语句
   
   1).create table语句句
   CREATE TABLE语句句⽤用于在Impala中的所需数据库中创建新表。 需要指定表名字并定义其列列和每列列的数
据类型。
   impala⽀支持的数据类型和hive类似.
   create table IF NOT EXISTS database_name.table_name ( column1 data_type,
   column2 data_type, column3 data_type, ……… columnN data_type);
   
   CREATE TABLE IF NOT EXISTS my_db.student(name STRING, age INT, contact INT );
   默认建表的数据存储路路径跟hive⼀一致。也可以在建表的时候通过location指定具体路路径。
   2). insert 语句
   Impala的INSERT语句句有两个⼦子句句: into和overwrite。into⽤用于插⼊入新记录数据，overwrite⽤用于覆盖已
有的记录。
   insert into table_name (column1, column2, column3,...columnN)values (value1,
value2, value3,...valueN);
   Insert into table_name values (value1, value2, value2);
   这⾥里里，column1，column2，... columnN是要插⼊入数据的表中的列列的名称。还可以添加值⽽而不不指定列列
名，但是，需要确保值的顺序与表中的列列的顺序相同。
   create table employee (Id INT, name STRING, age INT,address STRING, salary
BIGINT);
   insert into employee VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );
insert into employee values (2, 'Khilan', 25, 'Delhi', 15000 );
Insert into employee values (3, 'kaushik', 23, 'Kota', 30000 );
Insert into employee values (4, 'Chaitali', 25, 'Mumbai', 35000 );
Insert into employee values (5, 'Hardik', 27, 'Bhopal', 40000 );
Insert into employee values (6, 'Komal', 22, 'MP', 32000 );
   
   overwrite覆盖⼦子句句覆盖表当中全部记录。 覆盖的记录将从表中永久删除。
   Insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );
   3).select语句
   Impala SELECT语句句⽤用于从数据库查询数据， 此查询以表的形式返回数据。
   [linux122:21000] > select * from employee;
Query: select * from employee
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
+----+----------+-----+-----------+--------+
   4).describe 语句
   Impala中的describe语句句⽤用于提供表的描述。 此语句句的结果包含有关表的信息，例例如列列名称及其数据
类型。
   describe table_name;
   5).alter table
   Impala中的Alter table语句句⽤用于对给定表执⾏行行更更改。使⽤用此语句句，我们可以添加，删除或修改现有表中
的列列，也可以重命名它们。
   参考Hive实现。
   6).delete、truncate table
   Impala drop table语句句⽤用于删除Impala中的现有表。此语句句还会删除内部表的底层HDFS⽂文件。
   注意：使⽤用此命令时必须⼩小⼼心，因为删除表后，表中可⽤用的所有信息也将永远丢失。
   drop table database_name.table_name;
   您也可以使⽤用DROP TABLE命令删除⼀一个完整的表，但它会从数据库中删除完整的表结构，如果您希望
存储⼀一些数据，您将需要重新创建此表。
    truncate table_name;
	Impala对复杂数据类型的⽀支持
	对于Text存储格式中的复杂类型不不⽀支持，复杂类型要使⽤用parquet格式。
	7).view视图
	视图仅仅是存储在数据库中具有关联名称的Impala查询语⾔言的语句句。 它是以预定义的SQL查询形式的表
的组合。
    视图可以包含表的所有⾏行行或选定的⾏行行。
	create view if not exists view_name as select statement
	创建视图view、查询视图view
	create view if not exists employee_view AS select name, age from employee;
	修改视图
	alter view database_name.view_name as Select语句
	删除视图
	drop view database_name.view_name;
	8).order by子句
	Impala ORDER BY⼦子句句⽤用于根据⼀一个或多个列列以升序或降序对数据进⾏行行排序。 默认情况下，⼀一些数据
库按升序对查询结果进⾏行行排序。
    select * from table_name ORDER BY col_name
	 [ASC|DESC] [NULLS FIRST|NULLS LAST]
	可以使⽤用关键字ASC或DESC分别按升序或降序排列列表中的数据。
	如果我们使⽤用NULLS FIRST，表中的所有空值都排列列在顶⾏行行; 如果我们使⽤用NULLS LAST，包含空值的⾏行行
将最后排列列。
    9).group by子句
	Impala GROUP BY子句与SELECT语句句协作使⽤用，以将相同的数据排列列到组中。
	select name, sum(salary) from employee group by name;
	10).having 子句
	容易易与where过滤进⾏行行混淆，
	where:过滤的数据是原始数据，表中本来就存在的数据；
    having:过滤的是查询结果数据；
     按年年龄对表进⾏行行分组，并选择每个组的最⼤大⼯工资，并显示⼤大于20000的⼯工资
	 select max(salary) from employee group by age having max(salary) > 20000;
	11).limit、offset
	Impala中的limit子句用于将结果集的⾏行数限制为所需的数，即查询的结果集不包含超过指定限制的记
录。 
    一般来说，select查询的resultset中的行从0开始。使用offset子句，我们可以决定从哪里考虑输出。
	select * from employee order by salary limit 2 offset 2;
	使用offset关键字要求结果数据必须是排序之后的！！
	
	
	

   
  